Flask+requests发起页面请求示例

您所在的位置:网站首页 flask post请求 Flask+requests发起页面请求示例

Flask+requests发起页面请求示例

2024-07-10 02:24| 来源: 网络整理| 查看: 265

本文主要记录通过flask+requests发起请求的示例,包括:

1、发起get请求

2、发起post请求

3、发起可选请求

1、Flask和Requests怎么一起发送get请求?1.1 flask访问url的时候,会执行路径下对应的方法。示例:访问百度代码语言:txt复制from flask import Flask import requests app = Flask(__name__) url = 'http://www.baidu.com' @app.route('/get') def get(): r = requests.get(url) r.encoding = 'utf-8' return r.text app.run(debug=True)结果:

1.2 在页面上展示一个接口的断言结果代码语言:txt复制__author__ = 'catleer' from flask import Flask import requests app = Flask(__name__) url = 'http://www.baidu.com' def get_assert(): r = requests.get(url) if r.status_code == 200: return True else: return False @app.route('/get') def get(): if get_assert(): return '通过' else: return '失败' app.run(debug=True)

结果:

将url变为其他具有反爬机制的url,会发现结果是失败,因为页面有反爬虫机制,不允许使用这种方式访问。对于这种情况,要记录失败的原因。在测试内部web页面的时候,要注意考虑这种情况。将url变为非法的url,会直接导致服务报错,所以当接口地址非法时,需要有异常处理机制1.3 对get请求进行基本的异常处理代码语言:txt复制import re from flask import Flask import requests app = Flask(__name__) url1 = 'https://www.jianshu.com/u/39cef8a56bf9' url = 'http://www' def get_assert(url): # 判断url是否合法,需要了解url的构成,用正则匹配进行判断 # url的构成:协议、域名、端口、虚拟目录、文件名、参数部分等 其中:协议、域名是必须存在的 # 协议为:http或https 域名为:xxx.xxxx.xxx 端口为:数字 if not re.match(r'^https?://[^\s]\*\.[^\s]\*\.[com|cn|net].\*', url): return 'URL不合法,无法执行接口用例' r = requests.get(url) r.encoding = 'utf-8' if r.status_code == 200: return True else: return r.text @app.route('/get') def get(): if get_assert(url) == True: return '通过' else: return '失败' + ',' + '失败原因:' + get_assert(url)

结果:

2、通过flask发送post请求2.1 flask和requests怎么发送post请求呢?

以登录禅道系统为例,传入post的参数包括url和data,data为json格式,包括:token、用户名、密码等,需要与实际接口传入的参数一致。

代码语言:javascript复制""" Created by catleer on 2018-06-08. """ __author__ = 'catleer' import re from flask import Flask import requests app = Flask(__name__) url1 = 'https://www.jianshu.com/u/39cef8a56bf9' url = 'http://139.99.152.146:8080/zentao/user-login.html' data = {'authenticity_token': '+gy/zbvCNJATHwvygafFlOOR4gF5dl3bzheFlArNlN3IvlSuURRTZYbFZ5wTAdIwWl+TaykOF+lXbwQXWYkodg==', 'user[email]': '[email protected]', 'user[password]': '123456789', 'user[remember_me]': '0', 'commit': '登录'} def post_assert(url, data): # 判断url是否合法,需要了解url的构成,用正则匹配进行判断 # url的构成:协议、域名、端口、虚拟目录、文件名、参数部分等 其中:协议、域名是必须存在的 # 协议为:http或https 域名为:xxx.xxxx.xxx 端口为:数字 if not re.match(r'^https?://[^\s]*\.[^\s]*\.[com|cn|net].*', url): return 'URL不合法,无法执行接口用例' r = requests.post(url, data=data) r.encoding = 'utf-8' if r.status_code == 200: return True else: return r.text @app.route('/post') def get(): if post_assert(url, data) == True: return '通过' else: return '失败' + ',' + '失败原因:' + post_assert(url, data) app.run(debug=True)代码语言:javascript复制import re from flask import Flask import requests app = Flask(__name__) url1 = 'https://www.jianshu.com/u/39cef8a56bf9' url = 'http://httpbin.org/anything' data = {'a': 'hi'} def post_assert(url, data): # 判断url是否合法,需要了解url的构成,用正则匹配进行判断 # url的构成:协议、域名、端口、虚拟目录、文件名、参数部分等 其中:协议、域名是必须存在的 # 协议为:http或https 域名为:xxx.xxxx.xxx 端口为:数字 if not re.match(r'^https?://[^\s]*\.[com|cn|net|org].*', url): return 'URL不合法,无法执行接口用例' r = requests.post(url, data=data) r.encoding = 'utf-8' if r.status_code == 200: return True else: return r.text @app.route('/post') def get(): if post_assert(url, data) == True: return '通过' else: return '失败' + ',' + '失败原因:' + post_assert(url, data) app.run(debug=True)

3、通过Flask发送请求,请求可选

3.1 Flask发送请求

前面看到,可以通过flask发送get或post请求,那么怎么通过Flask发送任意类型的请求呢,怎么把这些集成在一个方法中?

通过自定义一个request方法,将get或post作为参数传入。

代码语言:javascript复制import re from flask import Flask import requests from requests import Request, Session app = Flask(__name__) url1 = 'https://www.jianshu.com/u/39cef8a56bf9' url = 'http://httpbin.org/anything' data = {'a': 'hi'} def try_request(method, url, data, header={}, stream=True, verify=False, proxies={}, cert=None, timeout=100): if not re.match(r'^https?://[^\s]*\.[com|cn|net|org].*', url): return 'URL不合法,无法执行接口用例' s = Session() method = method.upper() req = Request(method, url, data=data, headers=header ) prepped = req.prepare() resp = s.send(prepped, stream=stream, verify=verify, proxies=proxies, cert=cert, timeout=timeout ) resp.encoding = 'utf-8' if resp.status_code == 200: return True else: return resp.text # method = 'get' @app.route('/requests/') def get(method): if try_request(method, url, data) == True: return '请求方法, %s!请求结果:通过' % method else: return '失败' + ',' + '失败原因:' + try_request(method, url, data) app.run(debug=True)

查看显示结果:

【技术创作101训练营】



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3